package com.huqing.icu.utils;

import com.huqing.icu.exceptions.BusinessException;
import com.huqing.icu.protocol.SystemResponseCode;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.collections.CollectionUtils;

import java.util.List;

/**
 * 参数验证工具类
 */
public class ParamValidateUtils {

    public static final String DEFAULT_NOT_NULL_MSG = "参数不能为空！";
    public static final String DEFAULT_NOT_BLANK_MSG = "字符串不能为空！";
    public static final String DEFAULT_NOT_EMPTY_MSG = "集合不能为空！";
    public static final String OBJ_NOT_NULL_MSG = "对象不能为空！";
    public static final String ID_NOT_NULL_MSG = "id不能为空！";

    /**
     * 验证参数是否为null
     *
     * @param obj 验证的参数
     * @param msg 验证返回的信息
     */
    public static void validateNotNull(Object obj, String msg) {
        if (obj == null) {
            throw new BusinessException(SystemResponseCode.PARAM_VALUE_ILLEGAL.getCode(),
                    msg == null ? DEFAULT_NOT_NULL_MSG : msg);
        }
    }

    /**
     * 验证参数是否为null
     *
     * @param obj 验证的参数
     */
    public static void validateNotNull(Object obj) {
        validateNotNull(obj, null);
    }

    /**
     * 验证字符串是否为null或空字符串
     *
     * @param obj 验证的字符串
     * @param msg 验证返回的信息
     */
    public static void validateStringNotBlank(String obj, String msg) {
        if (StringUtils.isBlank(obj)) {
            throw new BusinessException(SystemResponseCode.PARAM_VALUE_ILLEGAL.getCode(),
                    msg == null ? DEFAULT_NOT_BLANK_MSG : msg);
        }
    }

    /**
     * 验证List是否为null或空集
     *
     * @param obj 验证的字符串
     * @param msg 验证返回的信息
     */
    public static void validateListNotEmpty(List obj, String msg) {
        if (CollectionUtils.isEmpty(obj)) {
            throw new BusinessException(SystemResponseCode.PARAM_VALUE_ILLEGAL.getCode(),
                    msg == null ? DEFAULT_NOT_EMPTY_MSG : msg);
        }
    }

    /**
     * 抛出参数不合法异常
     *
     * @param msg
     */
    public static void throwParamValueIllegalExp(String msg) {
        throw new BusinessException(SystemResponseCode.PARAM_VALUE_ILLEGAL.getCode(), msg);
    }

    /**
     * 抛出内部异常
     *
     * @param msg
     */
    public static void throwInternalIllegalExp(String msg) {
        throw new BusinessException(SystemResponseCode.INTERNAL_ERROR.getCode(), msg);
    }

    /**
     * 抛出内部异常
     *
     * @param msg
     */
    public static void throwException(int code, String msg) {
        throw new BusinessException(code, msg);
    }

    /**
     * 抛出内部异常
     *
     * @param msg
     */
    public static void throwInternalErrorExp(String msg) {
        throw new BusinessException(SystemResponseCode.INTERNAL_ERROR.getCode(), msg);
    }

    /**
     * 抛出内部异常，内容已存在
     *
     * @param msg
     */
    public static void throwObjectExistExp(String msg) {
        throw new BusinessException(SystemResponseCode.OBJECT_EXIST.getCode(), msg);
    }

    /**
     * 抛出内部异常，内容不存在
     *
     * @param msg
     */
    public static void throwObjectNotExistExp(String msg) {
        throw new BusinessException(SystemResponseCode.OBJECT_NOT_EXIST.getCode(), msg);
    }
}
